package avicit.im.lantop.basic.libstructuredefine.action.service;

import java.util.List;
import java.util.Map;

import avicit.im.lantop.basic.libstructuredefine.domain.LantopArchiveClassT;
import avicit.im.lantop.basic.libstructuredefine.domain.LantopArchiveTabClassV;
import avicit.platform6.commons.utils.web.TreeNode;
import avicit.platform6.core.exception.DaoException;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：钟一华</p>
 * <p>邮箱：zhongyih@avicit.com</p>
 * <p>创建时间： 2015-11-3 下午2:14:34 </p>
 * <p>类说明：库结构定义模板树接口</p>
 * <p>修改记录： </p>
 */
public interface LantopArchiveClassService {

	/**
	 * 根据主键加载LantopArchiveClass对象
	 * 
	 * @param id
	 *            主键
	 * @return LantopArchiveClass对象
	 */
	public LantopArchiveClassT getLantopArchiveClassById(String id) throws Exception;

	/**
	 * 更新LantopArchiveClass对象入数据库表中
	 * 
	 * @param lantopArchiveClass
	 *            已存实体对象
	 */
	public void updateLantopArchiveClass(LantopArchiveClassT lantopArchiveClass) throws Exception;

	/**
	 * 增加LantopArchiveClass对象
	 * 
	 * @param bean
	 * @throws DaoException
	 */
	void insertLantopArchiveClass(LantopArchiveClassT lantopArchiveClass)  throws DaoException;

	/**
	 * 获取treePath
	 * @param nodeId
	 * @return
	 */
	public String getTreePath(String nodeId) throws Exception;

	/**
	 * 删除LantopArchiveClass对象
	 * 
	 * @param id
	 *            要删除对象id
	 */
	public void deleteLantopArchiveClassById(String id) throws Exception;

	/**
	 * 根据ids批量删除LantopArchiveClass对象
	 * 
	 * @param ids
	 *            要删除对象id
	 */
	public void deleteLantopArchiveClassBatch(String ids);

	/**
	 * 根据主键加载LantopArchiveTabClassV对象
	 * 
	 * @param id
	 *            主键
	 * @return LantopArchiveTabClassV对象
	 */
	public LantopArchiveTabClassV getLantopArchiveTabClassVById(String id);

	/**
	 * FIXME (判断是否存在根节点)
	 * @author 刘中华
	 * @param deptId
	 * @param orgId
	 * @return int
	 * @throws
	 */
	public int getParentNodeByParentId(String deptId,String orgId) throws Exception;

	/**
	 * FIXME (根据当前人对应组织构建根节点)
	 * @author 刘中华 
	 * @param deptId
	 * @param orgId
	 * @return
	 * @throws Exception LantopArchiveClassT
	 * @throws
	 */
	public LantopArchiveClassT saveRootLantopArchiveTabClassVByType(String deptId,String orgId) throws Exception;

	/**
	 * FIXME (根据部门id获取组织id)
	 * @author 刘中华 
	 * @param deptId
	 * @return String
	 * @throws
	 */
	public String getOrgIdByDeptId(String deptId) throws Exception;

	/**
	 * FIXME (递归获取Tree当前节点下数据)
	 * @author 刘中华  
	 * @param id
	 * @param level
	 * @return List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> recurFindTreeNodesByParentId(String id, int level, String orgId) throws Exception;

	/**
	 * 获取公共字段信息
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getPublicFieldInfo() throws Exception;

	/**
	 * FIXME (判断模板文件夹下是否有数据节点)
	 * @author 刘中华 
	 * @param id
	 * @return int
	 * @throws
	 */
	public int getCountByClassFloder(String id) throws Exception;

	/**
	 * FIXME (操作数据,格式化后返回前台)
	 * @author 刘中华
	 * @param id
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getReturnAttribute(String id) throws Exception;

	/**
	 * 递归获取Tree当前节点下数据
	 * @author 朱锋 
	 * @param id
	 * @param sysId
	 * @return List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getCommTempletInfoTreeNodes(String id, int level, String currOrg);

	/**
	 * 验证同级别的节点名称是否已经存在
	 * @author 朱锋 
	 * @param lantopArchiveClass
	 * @return boolean
	 * @throws
	 */
	public boolean checkExtName(LantopArchiveClassT lantopArchiveClass) throws Exception;

	/**
	 * 删除库表后，删除字段对应设置信息
	 * @author 朱锋 
	 * @param list
	 * @throws Exception void
	 * @throws
	 */
	public void deleteLantopMapSet(List<Map<String, Object>> list) throws Exception;

	/***
	 * 参考模板复制库结构字段加载树时递归获取Tree当前节点下数据
	 * @param id
	 * @param level
	 * @return
	 */
	public List<TreeNode> recurFindTreeNodesByParentIdInCommTemplet(String id, int level, String orgId);

	/***
	 * 根据节点ID查找节点archiveType
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public String getParentTypeById(String id) throws Exception;

	/***
	 * 批量修改表中文名称
	 * @param List
	 * @return
	 * @throws Exception
	 */
	public void updateCbbTablesNameById(List<Map<String, Object>> list) throws Exception;
	
	/**
	 * 判断当前组织是否创建全宗信息
	 * @param orgId
	 * @param sysId
	 * @return
	 * @throws Exception boolean
	 * @throws
	 */
	public boolean checkCurrentFonds(String orgId, String sysId) throws Exception;
	/**
	 * 判断当前组织代码个数
	 * @param orgId
	 * @param sysId
	 * @param deptId
	 * @param nodeCode
	 * @return
	 * @throws Exception
	 */
	public int getNodeCodeNum(String orgId, String sysId,String deptId,String nodeCode) throws Exception;
}
